from flask import session, logging, g, current_app

from info.models import User
from functools import wraps


def do_rank(index):
    if index == 1:
        return 'first'
    elif index == 2:
        return 'second'
    elif index == 3:
        return 'third'
    else:
        return ''

# 封装方法读取用户基本信息
# def get_user_info():
#     user_id = session.get('user_id', None)
#     user = None
#     if user_id:
#         try:
#             user = User.query.get(user_id)
#         except Exception as e:
#             logging.error(e)
#     return user


def user_login_data(view_func):
    """
        获取用户基本信息的装饰器
        :param view_func: 被装饰的视图函数
        :return: view_func()
        """

    @wraps(view_func)  # 不让装饰器修改被装饰的视图函数的__name__属性，防止路由出错
    def wrapper(*args, **kwargs):
        """装饰器内层函数：装饰器业务逻辑写在内层函数"""
        user_id = session.get('user_id', None)
        user = None
        if user_id:
            try:
                user = User.query.get(user_id)
            except Exception as e:
                logging.error(e)
        # 使用g变量存储查询到的用户的基本信息
        # g变量时应用上下文，只在当前的请求中有效，不同的请求中，各自的g变量不同
        # g.user 表示定义上文，下文可以在视图函数中读取，因为进入到装饰器的请求和视图函数的请求时同一个请求
        g.user = user
        return view_func(*args, **kwargs) # 装饰结束之后，进入视图函数
    return wrapper